package main

import (
	"fmt"
	"sort"
)

/*
给定一个数组，编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重.
说明:
数组中数字范围[0,1000]
最大N个数与最小N个数不能有重叠，如有重叠，输入非法返回-1
输入非法返回-1.
输入描述
第一行输入M，M标识数组大小
第二行输入M个数，标识数组内容
第三行输入N，N表达需要计算的最大、最小N个数
*/
func main() {
	var m, n int
	fmt.Print("请输入数组大小M：")
	fmt.Scanf("%d", &m)
	arr := make([]int, m)
	fmt.Print("请输入数组内容，空格隔开：")
	for i := 0; i < m; i++ {
		fmt.Scanf("%d", &arr[i])
	}
	fmt.Print("请输入最大最小N的个数：")
	fmt.Scanf("%d\n", &n)
	NMaxMinSum(arr, n)
	fmt.Println("arr = ", arr)
}

func NMaxMinSum(arr []int, n int) int {
	// 排序
	sort.Slice(arr, func(i, j int) bool {
		return arr[i] < arr[j]
	})
	if arr[n-1] >= arr[len(arr)-n] {
		return -1
	}
	res := 0
	for i := 0; i < n; i++ {
		res += arr[i]
		res += arr[len(arr)-i-1]
	}
	return res
}
